home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1998 November: Tool Chest / Dev.CD Nov 98 TC.toast / Sample Code / Files / MoreFiles 1.4.9 / Pascal Interfaces / MoreFilesExtras.p < prev    next >
Encoding:
Text File  |  1998-09-15  |  27.6 KB  |  858 lines  |  [TEXT/MPS ]

  1. UNIT MoreFilesExtras;
  2.  
  3. {    Apple Macintosh Developer Technical Support                                }
  4. {                                                                            }
  5. {    A collection of useful high-level File Manager routines.                }
  6. {    by Jim Luther, Apple Developer Technical Support Emeritus                }
  7. {                                                                            }
  8. {    File:        MoreFilesExtras.p                                            }
  9. {                                                                            }
  10. {    Copyright © 1992-1998 Apple Computer, Inc.                                }
  11. {    All rights reserved.                                                    }
  12. {                                                                            }
  13. {    You may incorporate this sample code into your applications without        }
  14. {    restriction, though the sample code has been provided "AS IS" and the    }
  15. {    responsibility for its operation is 100% yours.  However, what you are    }
  16. {    not permitted to do is to redistribute the source as "DSC Sample Code"    }
  17. {    after having made changes. If you're going to re-distribute the source,    }
  18. {    we require that you make it clear in the source that the code was        }
  19. {    descended from Apple Sample Code, but that you've made changes.            }
  20.  
  21.  
  22. INTERFACE
  23.  
  24.     USES
  25.         Types, Files, Finder;
  26.  
  27. {***************************************************************************}
  28.  
  29. { Constants and types from Universal Interfaces 3.1 Files.h }
  30.  
  31. {$IFC UNIVERSAL_INTERFACES_VERSION < $0310}
  32. {$PUSH}
  33. {$ALIGN MAC68K}
  34.  
  35. CONST
  36.     volMountNoLoginMsgFlagBit    = 0;                            {  Input to VolumeMount: If set, the file system  }
  37.     volMountNoLoginMsgFlagMask    = $0001;                        {   should suppresss any log-in message/greeting dialog  }
  38.     volMountExtendedFlagsBit    = 7;                            {  Input to VolumeMount: If set, the mount info is a  }
  39.     volMountExtendedFlagsMask    = $0080;                        {   AFPXVolMountInfo record for 3.7 AppleShare Client  }
  40.  
  41. TYPE
  42. { AFPXVolMountInfo is the new AFP volume mount info record, requires the 3.7 AppleShare Client }
  43.     AFPXVolMountInfoPtr = ^AFPXVolMountInfo;
  44.     AFPXVolMountInfo = RECORD
  45.         length:                    INTEGER;                                {  length of location data (including self)  }
  46.         media:                    VolumeType;                                {  type of media  }
  47.         flags:                    INTEGER;                                {  bits for no messages, no reconnect  }
  48.         nbpInterval:            SInt8;                                    {  NBP Interval parameter (IM2, p.322)  }
  49.         nbpCount:                SInt8;                                    {  NBP Interval parameter (IM2, p.322)  }
  50.         uamType:                INTEGER;                                {  User Authentication Method type  }
  51.         zoneNameOffset:            INTEGER;                                {  short positive offset from start of struct to Zone Name  }
  52.         serverNameOffset:        INTEGER;                                {  offset to pascal Server Name string  }
  53.         volNameOffset:            INTEGER;                                {  offset to pascal Volume Name string  }
  54.         userNameOffset:            INTEGER;                                {  offset to pascal User Name string  }
  55.         userPasswordOffset:        INTEGER;                                {  offset to pascal User Password string  }
  56.         volPasswordOffset:        INTEGER;                                {  offset to pascal Volume Password string  }
  57.         extendedFlags:            INTEGER;                                {  extended flags word  }
  58.         uamNameOffset:            INTEGER;                                {  offset to a pascal UAM name string  }
  59.         alternateAddressOffset:    INTEGER;                                {  offset to Alternate Addresses in tagged format  }
  60.         AFPData:                PACKED ARRAY [1..176] OF CHAR;            {  variable length data may follow  }
  61.     END;
  62.  
  63.  
  64. CONST
  65.     kAFPExtendedFlagsAlternateAddressMask = 1;                    {   bit in AFPXVolMountInfo.extendedFlags that means alternateAddressOffset is used }
  66.  
  67.  
  68.                                                                 {  constants for use in AFPTagData.fType field }
  69.     kAFPTagTypeIP                = $01;
  70.     kAFPTagTypeIPPort            = $02;
  71.     kAFPTagTypeDDP                = $03;                            {  Currently unused }
  72.  
  73.  
  74.                                                                 {  constants for use in AFPTagData.fLength field }
  75.     kAFPTagLengthIP                = $06;
  76.     kAFPTagLengthIPPort            = $08;
  77.     kAFPTagLengthDDP            = $06;
  78.  
  79.  
  80. TYPE
  81.     AFPTagDataPtr = ^AFPTagData;
  82.     AFPTagData = PACKED RECORD
  83.         fLength:                UInt8;                                    {  length of this data tag including the fLength field  }
  84.         fType:                    UInt8;
  85.         fData:                    PACKED ARRAY [0..0] OF UInt8;            {  variable length data  }
  86.     END;
  87.  
  88.     AFPAlternateAddressPtr = ^AFPAlternateAddress;
  89.     AFPAlternateAddress = PACKED RECORD
  90.         fAddressCount:            UInt8;
  91.         fAddressList:            PACKED ARRAY [0..0] OF UInt8;            {  actually variable length packed set of AFPTagData  }
  92.     END;
  93.  
  94. {$ALIGN RESET}
  95. {$POP}
  96. {$ENDC}
  97.  
  98. {***************************************************************************}
  99.  
  100.     CONST
  101.         {    Deny mode permissions for use with the HOpenAware, HOpenRFAware,    }
  102.         {    FSpOpenAware, and FSpOpenRFAware functions.                            }
  103.  
  104.         dmNone = $0000;
  105.         dmNoneDenyRd = $0010;
  106.         dmNoneDenyWr = $0020;
  107.         dmNoneDenyRdWr = $0030;
  108.         dmRd = $0001;    { Single writer, multiple readers; the readers }
  109.         dmRdDenyRd = $0011;
  110.         dmRdDenyWr = $0021;    { Browsing - equivalent to fsRdPerm }
  111.         dmRdDenyRdWr = $0031;
  112.         dmWr = $0002;
  113.         dmWrDenyRd = $0012;
  114.         dmWrDenyWr = $0022;
  115.         dmWrDenyRdWr = $0032;
  116.         dmRdWr = $0003;    { Shared access - equivalent to fsRdWrShPerm }
  117.         dmRdWrDenyRd = $0013;
  118.         dmRdWrDenyWr = $0023;    { Single writer, multiple readers; the writer }
  119.         dmRdWrDenyRdWr = $0033;    { Exclusive access - equivalent to fsRdWrPerm }
  120.  
  121.         {    Bit masks to get common information out of ioACUser returned by            }
  122.         {    PBGetCatInfo (remember to clear ioACUser before calling PBGetCatInfo    }
  123.         {    since some file systems don't bother to set this field).                }
  124.         {                                                                            }
  125.         {    Use the GetDirAccessRestrictions or FSpGetDirAccessRestrictions            }
  126.         {    functions to retrieve the ioACUser access restrictions byte for            }
  127.         {    a folder.                                                                }
  128.         {                                                                            }
  129.         {    Note:    The access restriction byte returned by PBGetCatInfo is the        }
  130.         {            2's complement of the user's privileges byte returned in        }
  131.         {            ioACAccess by PBHGetDirAccess.                                    }
  132.  
  133.         { bits defined in ioACUser }
  134.         acUserNoSeeFoldersMask = $01;
  135.         acUserNoSeeFilesMask = $02;
  136.         acUserNoMakeChangesMask = $04;
  137.         acUserNotOwnerMask = $80;
  138.  
  139.         { mask for just the access restriction bits }
  140.         acUserAccessMask = $07;
  141.  
  142.         { common access privilege settings }
  143.         acUserFull = $00;                        { no access restiction bits on }
  144.         acUserNone = acUserAccessMask;            { all access restiction bits on }
  145.         acUserDropBox = acUserNoSeeFoldersMask + acUserNoSeeFilesMask; { make changes, but not see files or folders }
  146.         acUserBulletinBoard = acUserNoMakeChangesMask;    { see files and folders, but not make changes }
  147.  
  148.  
  149. {    For those times where you need to use more than one kind of                }
  150. {    File Manager parameter block but don't feel like wasting stack space,    }
  151. {    here's a parameter block you can reuse.                                    }
  152.  
  153. {$PUSH}
  154. {$ALIGN MAC68K}
  155.  
  156.     TYPE
  157.         UniversalFMPBHandle = ^UniversalFMPBPtr;
  158.         UniversalFMPBPtr = ^UniversalFMPB;
  159.         UniversalFMPB = RECORD
  160.                 CASE Integer OF
  161.                     1: (
  162.                             PB: ParamBlockRec
  163.                     );
  164.                     2: (
  165.                             ciPB: CInfoPBRec
  166.                     );
  167.                     3: (
  168.                             dtPB: DTPBRec
  169.                     );
  170.                     4: (
  171.                             hPB: HParamBlockRec
  172.                     );
  173.                     5: (
  174.                             cmPB: CMovePBRec
  175.                     );
  176.                     6: (
  177.                             wdPB: WDPBRec
  178.                     );
  179.                     7: (
  180.                             fcbPB: FCBPBRec
  181.                     );
  182.                     8: (
  183.                             xPB: XVolumeParam
  184.                     );
  185.             END;
  186.  
  187.  
  188. {    Used by GetUGEntries to return user or group lists.                        }
  189.  
  190.         UGEntryHandle = ^UGEntryPtr;
  191.         UGEntryPtr = ^UGEntry;
  192.         UGEntry = RECORD
  193.                 objType: Integer;
  194.                 objID: LongInt;
  195.                 name: Str31;
  196.             END;
  197.  
  198.  
  199. {    I use the following records instead of the AFPVolMountInfo and            }
  200. {    AFPXVolMountInfo structures in Files.p                                    }
  201.  
  202.         Str8 = STRING[8];
  203.         MyAFPVolMountInfoHandle = ^MyAFPVolMountInfoPtr;
  204.         MyAFPVolMountInfoPtr = ^MyAFPVolMountInfo;
  205.         MyAFPVolMountInfo = RECORD
  206.                 length: Integer;                { length of this record }
  207.                 media: VolumeType;                { type of media, always AppleShareMediaType }
  208.                 flags: Integer;                    { 0 = normal mount; set bit 0 to inhibit greeting messages }
  209.                 nbpInterval: SignedByte;        { NBP interval parameter; 7 is a good choice }
  210.                 nbpCount: SignedByte;            { NBP count parameter; 5 is a good choice }
  211.                 uamType: Integer;                { User Authentication Method }
  212.                 zoneNameOffset: Integer;        { offset from start of record to zoneName }
  213.                 serverNameOffset: Integer;        { offset from start of record to serverName }
  214.                 volNameOffset: Integer;            { offset from start of record to volName }
  215.                 userNameOffset: Integer;        { offset from start of record to userName }
  216.                 userPasswordOffset: Integer;    { offset from start of record to userPassword }
  217.                 volPasswordOffset: Integer;        { offset from start of record to volPassword }
  218.                 zoneName: Str32;                { server's AppleTalk zone name }
  219.                 serverName: Str32;                { server name }
  220.                 volName: Str27;                    { volume name }
  221.                 userName: Str31;                { user name (zero length Pascal string for guest) }
  222.                 userPassword: Str8;                { user password (zero length Pascal string if no user password) }
  223.                 volPassword: Str8;                { volume password (zero length Pascal string if no volume password) }
  224.             END;
  225.         MyAFPXVolMountInfo = RECORD
  226.                 length: Integer;                { length of this record }
  227.                 media: VolumeType;                { type of media, always AppleShareMediaType }
  228.                 flags: Integer;                    { 0 = normal mount; set bit 0 to inhibit greeting messages }
  229.                 nbpInterval: SignedByte;        { NBP interval parameter; 7 is a good choice }
  230.                 nbpCount: SignedByte;            { NBP count parameter; 5 is a good choice }
  231.                 uamType: Integer;                { User Authentication Method }
  232.                 zoneNameOffset: Integer;        { offset from start of record to zoneName }
  233.                 serverNameOffset: Integer;        { offset from start of record to serverName }
  234.                 volNameOffset: Integer;            { offset from start of record to volName }
  235.                 userNameOffset: Integer;        { offset from start of record to userName }
  236.                 userPasswordOffset: Integer;    { offset from start of record to userPassword }
  237.                 volPasswordOffset: Integer;        { offset from start of record to volPassword }
  238.                 extendedFlags: Integer;            { extended flags word }
  239.                 uamNameOffset: Integer;            { offset to a pascal UAM name string }
  240.                 alternateAddressOffset: Integer; { offset to Alternate Addresses in tagged format }
  241.                 zoneName: Str32;                { server's AppleTalk zone name }
  242.                 serverName: Str32;                { server name }
  243.                 volName: Str27;                    { volume name }
  244.                 userName: Str31;                { user name (zero length Pascal string for guest) }
  245.                 userPassword: Str8;                { user password (zero length Pascal string if no user password) }
  246.                 volPassword: Str8;                { volume password (zero length Pascal string if no volume password) }
  247.                 uamName: Str32;                    { UAM name }
  248.                 alternateAddress: Packed Array [0..0] OF Char; { variable length data }
  249.             END;
  250.  
  251. {$ALIGN RESET}
  252. {$POP}
  253.  
  254.  
  255. {***************************************************************************}
  256.  
  257.     {    Functions to get information out of GetVolParmsInfoBuffer.    }
  258.     {    (implemented in this Unit).                                    }
  259.  
  260.     FUNCTION isNetworkVolume (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  261.     FUNCTION hasLimitFCBs (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  262.     FUNCTION hasLocalWList (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  263.     FUNCTION hasNoMiniFndr (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  264.     FUNCTION hasNoVNEdit (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  265.     FUNCTION hasNoLclSync (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  266.     FUNCTION hasTrshOffLine (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  267.     FUNCTION hasNoSwitchTo (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  268.     FUNCTION hasNoDeskItems (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  269.     FUNCTION hasNoBootBlks (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  270.     FUNCTION hasAccessCntl (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  271.     FUNCTION hasNoSysDir (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  272.     FUNCTION hasExtFSVol (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  273.     FUNCTION hasOpenDeny (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  274.     FUNCTION hasCopyFile (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  275.     FUNCTION hasMoveRename (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  276.     FUNCTION hasDesktopMgr (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  277.     FUNCTION hasShortName (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  278.     FUNCTION hasFolderLock (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  279.     FUNCTION hasPersonalAccessPrivileges (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  280.     FUNCTION hasUserGroupList (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  281.     FUNCTION hasCatSearch (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  282.     FUNCTION hasFileIDs (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  283.     FUNCTION hasBTreeMgr (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  284.     FUNCTION hasBlankAccessPrivileges (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  285.  
  286.     {    Functions to get common information out of ioACUser.    }
  287.     {    (implemented in this Unit).                                }
  288.     FUNCTION userIsOwner (ioACUser: SInt8): Boolean;
  289.     FUNCTION userHasFullAccess (ioACUser: SInt8): Boolean;
  290.     FUNCTION userHasDropBoxAccess (ioACUser: SInt8): Boolean;
  291.     FUNCTION userHasBulletinBoard (ioACUser: SInt8): Boolean;
  292.     FUNCTION userHasNoAccess (ioACUser: SInt8): Boolean;
  293.  
  294.  
  295. {***************************************************************************}
  296.  
  297.  
  298.     PROCEDURE TruncPString (destination: StringPtr;
  299.                                     source: StringPtr;
  300.                                     maxLength: Integer);
  301.  
  302.     FUNCTION GetTempBuffer (buffReqSize: LONGINT;
  303.                                     VAR buffActSize: LONGINT): Ptr;
  304.  
  305.     FUNCTION GetVolumeInfoNoName (pathname: StringPtr;
  306.                                     vRefNum: Integer;
  307.                                     VAR pb: HParamBlockRec): OSErr;
  308.  
  309.     FUNCTION XGetVolumeInfoNoName(pathname: StringPtr;
  310.                                     vRefNum: Integer;
  311.                                     VAR pb: XVolumeParam): OSErr;
  312.     
  313.     FUNCTION GetCatInfoNoName (vRefNum: Integer;
  314.                                     dirID: LongInt;
  315.                                     name: StringPtr;
  316.                                     VAR pb: CInfoPBRec): OSErr;
  317.  
  318.     FUNCTION DetermineVRefNum (pathname: StringPtr;
  319.                                     vRefNum: Integer;
  320.                                     VAR realVRefNum: Integer): OSErr;
  321.  
  322.     FUNCTION HGetVInfo (volReference: Integer;
  323.                                     volName: StringPtr;
  324.                                     VAR vRefNum: Integer;
  325.                                     VAR freeBytes: LongInt;
  326.                                     VAR totalBytes: LongInt): OSErr;
  327.  
  328.     FUNCTION XGetVInfo (volReference: Integer;
  329.                                     volName: StringPtr;
  330.                                     VAR vRefNum: Integer;
  331.                                     VAR freeBytes: UnsignedWide;
  332.                                     VAR totalBytes: UnsignedWide): OSErr;
  333.  
  334.     FUNCTION CheckVolLock (pathname: StringPtr;
  335.                                     vRefNum: Integer): OSErr;
  336.  
  337.     FUNCTION GetDriverName (driverRefNum: Integer;
  338.                                     VAR driverName: Str255): OSErr;
  339.  
  340.     FUNCTION FindDrive (pathname: StringPtr;
  341.                                     vRefNum: Integer;
  342.                                     VAR driveQElementPtr: DrvQElPtr): OSErr;
  343.  
  344.     FUNCTION GetVolFileSystemID (pathname: StringPtr;
  345.                                     vRefNum: Integer;
  346.                                     VAR fileSystemID: Integer): OSErr;
  347.                                    
  348.     FUNCTION GetVolState (pathname: StringPtr;
  349.                                     vRefNum: Integer;
  350.                                     VAR volumeOnline: Boolean;
  351.                                     VAR volumeEjected: Boolean;
  352.                                     VAR driveEjectable: Boolean;
  353.                                     VAR driverWantsEject: Boolean): OSErr;
  354.                                    
  355.     FUNCTION UnmountAndEject (pathname: StringPtr;
  356.                                     vRefNum: Integer): OSErr;
  357.  
  358.     FUNCTION OnLine (volumes: FSSpecPtr;
  359.                                     reqVolCount: Integer;
  360.                                     VAR actVolCount: Integer;
  361.                                     VAR volIndex: Integer): OSErr;
  362.  
  363.     FUNCTION SetDefault (newVRefNum: Integer;
  364.                                     newDirID: LongInt;
  365.                                     VAR oldVRefNum: Integer;
  366.                                     VAR oldDirID: LongInt): OSErr;
  367.  
  368.     FUNCTION RestoreDefault (oldVRefNum: Integer;
  369.                                     oldDirID: LongInt): OSErr;
  370.  
  371.     FUNCTION GetDInfo (vRefNum: Integer;
  372.                                     dirID: LongInt;
  373.                                     name: StringPtr;
  374.                                     VAR fndrInfo: DInfo): OSErr;
  375.  
  376.     FUNCTION FSpGetDInfo ({CONST}
  377.                                     VAR spec: FSSpec;
  378.                                     VAR fndrInfo: DInfo): OSErr;
  379.  
  380.     FUNCTION SetDInfo (vRefNum: Integer;
  381.                                     dirID: LongInt;
  382.                                     name: StringPtr;
  383.                                     fndrInfo: DInfo): OSErr;
  384.  
  385.     FUNCTION FSpSetDInfo ({CONST}
  386.                                     VAR spec: FSSpec;
  387.                                     fndrInfo: DInfo): OSErr;
  388.  
  389.     FUNCTION GetDirectoryID (vRefNum: Integer;
  390.                                     dirID: LongInt;
  391.                                     name: StringPtr;
  392.                                     VAR theDirID: LongInt;
  393.                                     VAR isDirectory: Boolean): OSErr;
  394.  
  395.     FUNCTION FSpGetDirectoryID ({CONST}
  396.                                     VAR spec: FSSpec;
  397.                                     VAR theDirID: LongInt;
  398.                                     VAR isDirectory: Boolean): OSErr;
  399.  
  400.     FUNCTION GetDirName (vRefNum: Integer;
  401.                                     dirID: LongInt;
  402.                                     VAR name: Str31): OSErr;
  403.  
  404.     FUNCTION GetIOACUser (vRefNum: Integer;
  405.                                     dirID: LongInt;
  406.                                     name: StringPtr;
  407.                                     VAR ioACUser: SInt8): OSErr;
  408.  
  409.     FUNCTION FSpGetIOACUser (vRefNum: Integer;
  410.                                     dirID: LongInt;
  411.                                     name: StringPtr;
  412.                                     VAR ioACUser: SInt8): OSErr;
  413.  
  414.     FUNCTION GetParentID (vRefNum: Integer;
  415.                                     dirID: LongInt;
  416.                                     name: StringPtr;
  417.                                     VAR parID: LongInt): OSErr;
  418.  
  419.     FUNCTION GetFilenameFromPathname (pathname: Str255;
  420.                                     VAR filename: Str255): OSErr;
  421.  
  422.     FUNCTION GetObjectLocation (vRefNum: Integer;
  423.                                     dirID: LongInt;
  424.                                     pathname: StringPtr;
  425.                                     VAR realVRefNum: Integer;
  426.                                     VAR realParID: LongInt;
  427.                                     VAR realName: Str255;
  428.                                     VAR isDirectory: Boolean): OSErr;
  429.  
  430.     FUNCTION GetDirItems (vRefNum: Integer;
  431.                                     dirID: LongInt;
  432.                                     name: StringPtr;
  433.                                     getFiles: Boolean;
  434.                                     getDirectories: Boolean;
  435.                                     items: FSSpecPtr;
  436.                                     reqItemCount: Integer;
  437.                                     VAR actItemCount: Integer;
  438.                                     VAR itemIndex: Integer): OSErr;
  439.  
  440.     FUNCTION DeleteDirectoryContents (vRefNum: Integer;
  441.                                     dirID: LongInt;
  442.                                     name: StringPtr): OSErr;
  443.  
  444.     FUNCTION DeleteDirectory (vRefNum: Integer;
  445.                                     dirID: LongInt;
  446.                                     name: StringPtr): OSErr;
  447.  
  448.     FUNCTION CheckObjectLock (vRefNum: Integer;
  449.                                     dirID: LongInt;
  450.                                     name: StringPtr): OSErr;
  451.  
  452.     FUNCTION FSpCheckObjectLock ({CONST}
  453.                                     VAR spec: FSSpec): OSErr;
  454.  
  455.     FUNCTION GetFileSize (vRefNum: Integer;
  456.                                     dirID: LongInt;
  457.                                     fileName: Str255;
  458.                                     VAR dataSize: LONGINT;
  459.                                     VAR rsrcSize: LONGINT): OSErr;
  460.  
  461.     FUNCTION FSpGetFileSize ({CONST}
  462.                                     VAR spec: FSSpec;
  463.                                     VAR dataSize: LONGINT;
  464.                                     VAR rsrcSize: LONGINT): OSErr;
  465.  
  466.     FUNCTION BumpDate (vRefNum: Integer;
  467.                                     dirID: LongInt;
  468.                                     name: StringPtr): OSErr;
  469.  
  470.     FUNCTION FSpBumpDate ({CONST}
  471.                                     VAR spec: FSSpec): OSErr;
  472.  
  473.  
  474.     FUNCTION ChangeCreatorType (vRefNum: Integer;
  475.                                     dirID: LongInt;
  476.                                     name: Str255;
  477.                                     creator: OSType;
  478.                                     fileType: OSType): OSErr;
  479.  
  480.     FUNCTION FSpChangeCreatorType ({CONST}
  481.                                     VAR spec: FSSpec;
  482.                                     creator: OSType;
  483.                                     fileType: OSType): OSErr;
  484.  
  485.     FUNCTION ChangeFDFlags (vRefNum: Integer;
  486.                                     dirID: LongInt;
  487.                                     name: StringPtr;
  488.                                     setBits: Boolean;
  489.                                     flagBits: Integer): OSErr;
  490.  
  491.     FUNCTION FSpChangeFDFlags ({CONST}
  492.                                     VAR spec: FSSpec;
  493.                                     setBits: Boolean;
  494.                                     flagBits: Integer): OSErr;
  495.  
  496.     FUNCTION SetIsInvisible (vRefNum: Integer;
  497.                                     dirID: LongInt;
  498.                                     name: StringPtr): OSErr;
  499.  
  500.     FUNCTION FSpSetIsInvisible ({CONST}
  501.                                     VAR spec: FSSpec): OSErr;
  502.  
  503.     FUNCTION ClearIsInvisible (vRefNum: Integer;
  504.                                     dirID: LongInt;
  505.                                     name: StringPtr): OSErr;
  506.  
  507.     FUNCTION FSpClearIsInvisible ({CONST}
  508.                                     VAR spec: FSSpec): OSErr;
  509.  
  510.     FUNCTION SetNameLocked (vRefNum: Integer;
  511.                                     dirID: LongInt;
  512.                                     name: StringPtr): OSErr;
  513.  
  514.     FUNCTION FSpSetNameLocked ({CONST}
  515.                                     VAR spec: FSSpec): OSErr;
  516.  
  517.     FUNCTION ClearNameLocked (vRefNum: Integer;
  518.                                     dirID: LongInt;
  519.                                     name: StringPtr): OSErr;
  520.  
  521.     FUNCTION FSpClearNameLocked ({CONST}
  522.                                     VAR spec: FSSpec): OSErr;
  523.  
  524.     FUNCTION SetIsStationery (vRefNum: Integer;
  525.                                     dirID: LongInt;
  526.                                     name: Str255): OSErr;
  527.  
  528.     FUNCTION FSpSetIsStationery ({CONST}
  529.                                     VAR spec: FSSpec): OSErr;
  530.  
  531.     FUNCTION ClearIsStationery (vRefNum: Integer;
  532.                                     dirID: LongInt;
  533.                                     name: Str255): OSErr;
  534.  
  535.     FUNCTION FSpClearIsStationery ({CONST}
  536.                                     VAR spec: FSSpec): OSErr;
  537.  
  538.     FUNCTION SetHasCustomIcon (vRefNum: Integer;
  539.                                     dirID: LongInt;
  540.                                     name: StringPtr): OSErr;
  541.  
  542.     FUNCTION FSpSetHasCustomIcon ({CONST}
  543.                                     VAR spec: FSSpec): OSErr;
  544.  
  545.     FUNCTION ClearHasCustomIcon (vRefNum: Integer;
  546.                                     dirID: LongInt;
  547.                                     name: StringPtr): OSErr;
  548.  
  549.     FUNCTION FSpClearHasCustomIcon ({CONST}
  550.                                     VAR spec: FSSpec): OSErr;
  551.  
  552.     FUNCTION ClearHasBeenInited (vRefNum: Integer;
  553.                                     dirID: LongInt;
  554.                                     name: StringPtr): OSErr;
  555.  
  556.     FUNCTION FSpClearHasBeenInited ({CONST}
  557.                                     VAR spec: FSSpec): OSErr;
  558.  
  559.     FUNCTION CopyFileMgrAttributes (srcVRefNum: Integer;
  560.                                     srcDirID: LongInt;
  561.                                     srcName: StringPtr;
  562.                                     dstVRefNum: Integer;
  563.                                     dstDirID: LongInt;
  564.                                     dstName: StringPtr;
  565.                                     copyLockBit: Boolean): OSErr;
  566.  
  567.     FUNCTION FSpCopyFileMgrAttributes ({CONST}
  568.                                     VAR srcSpec: FSSpec;
  569.                                     {CONST}
  570.                                     VAR dstSpec: FSSpec;
  571.                                     copyLockBit: Boolean): OSErr;
  572.  
  573.     FUNCTION HOpenAware (vRefNum: Integer;
  574.                                     dirID: LongInt;
  575.                                     fileName: Str255;
  576.                                     denyModes: Integer;
  577.                                     VAR refNum: Integer): OSErr;
  578.  
  579.     FUNCTION FSpOpenAware ({CONST}
  580.                                     VAR spec: FSSpec;
  581.                                     denyModes: Integer;
  582.                                     VAR refNum: Integer): OSErr;
  583.  
  584.     FUNCTION HOpenRFAware (vRefNum: Integer;
  585.                                     dirID: LongInt;
  586.                                     fileName: Str255;
  587.                                     denyModes: Integer;
  588.                                     VAR refNum: Integer): OSErr;
  589.  
  590.     FUNCTION FSpOpenRFAware ({CONST}
  591.                                     VAR spec: FSSpec;
  592.                                     denyModes: Integer;
  593.                                     VAR refNum: Integer): OSErr;
  594.  
  595.     FUNCTION FSReadNoCache (refNum: Integer;
  596.                                     VAR count: LongInt;
  597.                                     buffPtr: Ptr): OSErr;
  598.  
  599.     FUNCTION FSWriteNoCache (refNum: Integer;
  600.                                     VAR count: LongInt;
  601.                                     buffPtr: Ptr): OSErr;
  602.  
  603.     FUNCTION FSWriteVerify (refNum: Integer;
  604.                                     VAR count: LongInt;
  605.                                     buffPtr: Ptr): OSErr;
  606.  
  607.     FUNCTION CopyFork (srcRefNum: Integer;
  608.                                     dstRefNum: Integer;
  609.                                     copyBufferPtr: Ptr;
  610.                                     copyBufferSize: LongInt): OSErr;
  611.  
  612.     FUNCTION GetFileLocation (refNum: Integer;
  613.                                     VAR vRefNum: Integer;
  614.                                     VAR dirID: LongInt;
  615.                                     fileName: StringPtr): OSErr;
  616.  
  617.     FUNCTION FSpGetFileLocation (refNum: Integer;
  618.                                     VAR spec: FSSpec): OSErr;
  619.  
  620.     FUNCTION CopyDirectoryAccess (srcVRefNum: Integer;
  621.                                     srcDirID: LongInt;
  622.                                     srcName: StringPtr;
  623.                                     dstVRefNum: Integer;
  624.                                     dstDirID: LongInt;
  625.                                     dstName: StringPtr): OSErr;
  626.  
  627.     FUNCTION FSpCopyDirectoryAccess ({CONST}
  628.                                     VAR srcSpec: FSSpec;
  629.                                     {CONST}
  630.                                     VAR dstSpec: FSSpec): OSErr;
  631.  
  632.     FUNCTION HMoveRenameCompat (vRefNum: Integer;
  633.                                     srcDirID: LongInt;
  634.                                     srcName: Str255;
  635.                                     dstDirID: LongInt;
  636.                                     dstpathName: StringPtr;
  637.                                     copyName: StringPtr): OSErr;
  638.  
  639.     FUNCTION FSpMoveRenameCompat ({CONST}
  640.                                     VAR srcSpec: FSSpec;
  641.                                     {CONST}
  642.                                     VAR dstSpec: FSSpec;
  643.                                     copyName: StringPtr): OSErr;
  644.  
  645.     FUNCTION BuildAFPVolMountInfo (flags: Integer;
  646.                                     nbpInterval: SignedByte;
  647.                                     nbpCount: SignedByte;
  648.                                     uamType: Integer;
  649.                                     zoneName: Str32;
  650.                                     serverName: Str32;
  651.                                     volName: Str27;
  652.                                     userName: Str31;
  653.                                     userPassword: Str8;
  654.                                     volPassword: Str8;
  655.                                     VAR afpInfoPtr: MyAFPVolMountInfoPtr): OSErr;
  656.  
  657.     FUNCTION RetrieveAFPVolMountInfo (afpInfoPtr: AFPVolMountInfoPtr;
  658.                                     VAR flags: Integer;
  659.                                     VAR uamType: Integer;
  660.                                     zoneName: StringPtr;
  661.                                     serverName: StringPtr;
  662.                                     volName: StringPtr;
  663.                                     userName: StringPtr): OSErr;
  664.  
  665.     FUNCTION BuildAFPXVolMountInfo (flags: Integer;
  666.                                     nbpInterval: SignedByte;
  667.                                     nbpCount: SignedByte;
  668.                                     uamType: Integer;
  669.                                     zoneName: Str32;
  670.                                     serverName: Str32;
  671.                                     volName: Str27;
  672.                                     userName: Str31;
  673.                                     userPassword: Str8;
  674.                                     volPassword: Str8;
  675.                                     uamName: Str32;
  676.                                     alternateAddressLength: LongInt;
  677.                                     alternateAddress: Ptr;
  678.                                     VAR afpXInfoPtr: AFPXVolMountInfoPtr): OSErr;
  679.  
  680.     FUNCTION RetrieveAFPXVolMountInfo(afpXInfoPtr: AFPXVolMountInfoPtr;
  681.                                     VAR flags: Integer;
  682.                                     VAR uamType: Integer;
  683.                                     zoneName: StringPtr;
  684.                                     serverName: StringPtr;
  685.                                     volName: StringPtr;
  686.                                     userName: StringPtr;
  687.                                     uamName: StringPtr;
  688.                                     VAR alternateAddressLength: LongInt;
  689.                                     VAR    alternateAddress: AFPAlternateAddressPtr): OSErr;
  690.  
  691.     FUNCTION GetUGEntries (objType: Integer;
  692.                                     entries: UGEntryPtr;
  693.                                     reqEntryCount: LongInt;
  694.                                     VAR actEntryCount: LongInt;
  695.                                     VAR objID: LongInt): OSErr;
  696.  
  697.  
  698. {***************************************************************************}
  699.  
  700.  
  701. IMPLEMENTATION
  702.  
  703.     {    Functions to get information out of GetVolParmsInfoBuffer.    }
  704.  
  705.     FUNCTION isNetworkVolume (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  706.     BEGIN
  707.         isNetworkVolume := (volParms.vMServerAdr <> 0);
  708.     END;
  709.  
  710.     FUNCTION hasLimitFCBs (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  711.     BEGIN
  712.         hasLimitFCBs := BTST(volParms.vMAttrib, bLimitFCBs);
  713.     END;
  714.  
  715.     FUNCTION hasLocalWList (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  716.     BEGIN
  717.         hasLocalWList := BTST(volParms.vMAttrib, bLocalWList);
  718.     END;
  719.  
  720.     FUNCTION hasNoMiniFndr (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  721.     BEGIN
  722.         hasNoMiniFndr := BTST(volParms.vMAttrib, bNoMiniFndr);
  723.     END;
  724.  
  725.     FUNCTION hasNoVNEdit (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  726.     BEGIN
  727.         hasNoVNEdit := BTST(volParms.vMAttrib, bNoVNEdit);
  728.     END;
  729.  
  730.     FUNCTION hasNoLclSync (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  731.     BEGIN
  732.         hasNoLclSync := BTST(volParms.vMAttrib, bNoLclSync);
  733.     END;
  734.  
  735.     FUNCTION hasTrshOffLine (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  736.     BEGIN
  737.         hasTrshOffLine := BTST(volParms.vMAttrib, bTrshOffLine);
  738.     END;
  739.  
  740.     FUNCTION hasNoSwitchTo (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  741.     BEGIN
  742.         hasNoSwitchTo := BTST(volParms.vMAttrib, bNoSwitchTo);
  743.     END;
  744.  
  745.     FUNCTION hasNoDeskItems (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  746.     BEGIN
  747.         hasNoDeskItems := BTST(volParms.vMAttrib, bNoDeskItems);
  748.     END;
  749.  
  750.     FUNCTION hasNoBootBlks (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  751.     BEGIN
  752.         hasNoBootBlks := BTST(volParms.vMAttrib, bNoBootBlks);
  753.     END;
  754.  
  755.     FUNCTION hasAccessCntl (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  756.     BEGIN
  757.         hasAccessCntl := BTST(volParms.vMAttrib, bAccessCntl);
  758.     END;
  759.  
  760.     FUNCTION hasNoSysDir (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  761.     BEGIN
  762.         hasNoSysDir := BTST(volParms.vMAttrib, bNoSysDir);
  763.     END;
  764.  
  765.     FUNCTION hasExtFSVol (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  766.     BEGIN
  767.         hasExtFSVol := BTST(volParms.vMAttrib, bHasExtFSVol);
  768.     END;
  769.  
  770.     FUNCTION hasOpenDeny (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  771.     BEGIN
  772.         hasOpenDeny := BTST(volParms.vMAttrib, bHasOpenDeny);
  773.     END;
  774.  
  775.     FUNCTION hasCopyFile (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  776.     BEGIN
  777.         hasCopyFile := BTST(volParms.vMAttrib, bHasCopyFile);
  778.     END;
  779.  
  780.     FUNCTION hasMoveRename (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  781.     BEGIN
  782.         hasMoveRename := BTST(volParms.vMAttrib, bHasMoveRename);
  783.     END;
  784.  
  785.     FUNCTION hasDesktopMgr (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  786.     BEGIN
  787.         hasDesktopMgr := BTST(volParms.vMAttrib, bHasDesktopMgr);
  788.     END;
  789.  
  790.     FUNCTION hasShortName (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  791.     BEGIN
  792.         hasShortName := BTST(volParms.vMAttrib, bHasShortName);
  793.     END;
  794.  
  795.     FUNCTION hasFolderLock (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  796.     BEGIN
  797.         hasFolderLock := BTST(volParms.vMAttrib, bHasFolderLock);
  798.     END;
  799.  
  800.     FUNCTION hasPersonalAccessPrivileges (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  801.     BEGIN
  802.         hasPersonalAccessPrivileges := BTST(volParms.vMAttrib, bHasPersonalAccessPrivileges);
  803.     END;
  804.  
  805.     FUNCTION hasUserGroupList (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  806.     BEGIN
  807.         hasUserGroupList := BTST(volParms.vMAttrib, bHasUserGroupList);
  808.     END;
  809.  
  810.     FUNCTION hasCatSearch (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  811.     BEGIN
  812.         hasCatSearch := BTST(volParms.vMAttrib, bHasCatSearch);
  813.     END;
  814.  
  815.     FUNCTION hasFileIDs (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  816.     BEGIN
  817.         hasFileIDs := BTST(volParms.vMAttrib, bHasFileIDs);
  818.     END;
  819.  
  820.     FUNCTION hasBTreeMgr (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  821.     BEGIN
  822.         hasBTreeMgr := BTST(volParms.vMAttrib, bHasBTreeMgr);
  823.     END;
  824.  
  825.     FUNCTION hasBlankAccessPrivileges (VAR volParms: GetVolParmsInfoBuffer): Boolean;
  826.     BEGIN
  827.         hasBlankAccessPrivileges := BTST(volParms.vMAttrib, bHasBlankAccessPrivileges);
  828.     END;
  829.  
  830.     {    Functions for testing ioACUser bits.    }
  831.  
  832.     FUNCTION userIsOwner (ioACUser: SInt8): Boolean;
  833.     BEGIN
  834.         userIsOwner := NOT (BTST(ioACUser, acUserNotOwnerMask));
  835.     END;
  836.  
  837.     FUNCTION userHasFullAccess (ioACUser: SInt8): Boolean;
  838.     BEGIN
  839.         userHasFullAccess := BAND(ioACUser, acUserAccessMask) = acUserFull;
  840.     END;
  841.  
  842.     FUNCTION userHasDropBoxAccess (ioACUser: SInt8): Boolean;
  843.     BEGIN
  844.         userHasDropBoxAccess := BAND(ioACUser, acUserAccessMask) = acUserDropBox;
  845.     END;
  846.  
  847.     FUNCTION userHasBulletinBoard (ioACUser: SInt8): Boolean;
  848.     BEGIN
  849.         userHasBulletinBoard := BAND(ioACUser, acUserAccessMask) = acUserBulletinBoard;
  850.     END;
  851.  
  852.     FUNCTION userHasNoAccess (ioACUser: SInt8): Boolean;
  853.     BEGIN
  854.         userHasNoAccess := BAND(ioACUser, acUserAccessMask) = acUserNone;
  855.     END;
  856.  
  857.  
  858. END.